/**
*	Header: object.h
*	
*	This header defines the object hierarchy for objects and items in the world.
*
*	
*/

#pragma once

#include <string>
//#include <unordered_map>
#include <algorithm>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/uniform_int_distribution.hpp>

//enum itemProperty {
//	VALUE,
//	WEIGHT
//};

class Object {
public:
	virtual void interact() = 0;
	const bool isPassable() {return passable;};
	const unsigned char getSymbol() {return c;};

protected:
	bool passable;
	unsigned char c;
private:
};

class Item {
public:
	Item();
	const std::string* const getDescription() {return &description;};
	/*const float getProperty(itemProperty ID) {return properties[ID];}
	void setProperty(itemProperty ID, float value) {properties[ID] = value;}*/
	const unsigned char getSymbol() {return c;};
	TCODColor& getColour() {return fore;};
protected:
	unsigned char c;
	TCODColor fore;
	std::string description;
	/*std::unordered_map<itemProperty,float> properties;*/
private:
};

Item::Item() {
	boost::random::mt19937 gen;
	boost::random::uniform_int_distribution<> dist(0, 10);
	c = '$';
	fore = TCODColor::yellow;
	/*properties[WEIGHT] = dist(gen);
	properties[VALUE] = dist(gen);*/
}